package models

import (
	"fmt"
	"gorm.io/gorm"
	"gorm.io/gorm/clause"
)

// 脚本结构体
type JobScript struct {
	Model
	Name           string `json:"name" validate:"required,min=1,max=50" gorm:"uniqueIndex;type:varchar(100);comment:任务脚本名称，支持使用通配符*进行模糊搜索" `
	Lang           string `json:"lang"`
	UserID         uint
	Code           string `json:"code" gorm:"type:text;comment:脚本原始内容"`
	Key            string `json:"key" gorm:"-"` //给前端表格
	CreateUserName string `json:"createUserName" gorm:"-"`
}

// 创建脚本方法
func (obj *JobScript) JobScriptCreate() error {
	return DB.Create(obj).Error
}

// 删除脚本方法
func (obj *JobScript) JobScriptDelete() error {
	return DB.Select(clause.Associations).Unscoped().Delete(obj).Error
}

// 更新脚本方法
func (obj *JobScript) JobScriptUpdate() error {
	return DB.Where("id = ?", obj.ID).Updates(obj).Error
}

// 获取所有脚本
func GetJobScriptAll() (objs []*JobScript, err error) {
	err = DB.Find(&objs).Error
	return
}

// 获取脚本列表 做分页限制
func GetJobScriptByIdsWithLimitOffset(ids []int, limit, offset int) (objs []*JobScript, err error) {
	err = DB.Limit(limit).Offset(offset).Find(&objs, ids).Error
	return
}

// 前端获取所有数据方法
func (obj *JobScript) FillFrontAllData() {
	dbUser, _ := GetUserById(int(obj.UserID))
	if dbUser != nil {
		obj.CreateUserName = dbUser.RealName
	}
	obj.Key = fmt.Sprintf("%d", obj.ID)
}

func GetJobScriptById(id int) (*JobScript, error) {
	var dbObj JobScript
	err := DB.Where("id = ?", id).First(&dbObj).Error
	if err != nil {
		if err == gorm.ErrRecordNotFound {
			return nil, fmt.Errorf("JobScript不存在")
		}
		return nil, fmt.Errorf("JobScript查询失败:%w", err)
	}
	return &dbObj, nil
}
